昨天探討到使用[0-9]這樣的方式來代表數字的範圍.
今天接著探討範圍.
In [1]: import re
In [2]: re.search("[0-9]", "4") != None
Out[2]: True
In [3]: re.search("[9-0]", "4") != None
---------------------------------------------------------------------------
error Traceback (most recent call last)
[0-9] 可以,但是 [9-0]不可以.
這是使用ASCII Code,而且要由小到大.
0-9 的ASCII Code是 48~57
A-Z 的ASCII Code是 65~90
a-z 的ASCII Code是 97~122
中間還有一些符號.
那要表示數字及英文字母的pattern呢?
先來看以下例子:
In [4]: re.search("[0-z]", "X") != None
Out[4]: True
In [5]: re.search("[0-z]", "@") != None
Out[5]: True
@ 也包含進來了.
要改用以下的方式:
In [6]: re.search("[0-9A-Za-z]", "X") != None
Out[6]: True
In [7]: re.search("[0-9A-Za-z]", "@") != None
Out[7]: False
In [8]: re.search("[A-Za-z0-9]", "X") != None
Out[8]: True
其中 A-Z a-z 0-9 這三組都是舉例,先後順序無關,只有0-9不能寫成9-0
字母亦同.
16進位是由 0-9 , a或A 表示10進位的10, 餘此類推
直到 f或F表示15. 16當然就進位寫成10了,以下用加上0x開頭的方式來判斷.
In [10]: re.search("^0[xX][0-9A-Fa-f]", "0XF") != None
Out[10]: True
In [11]: re.search("^0[xX][0-9A-Fa-f]", "0xE") != None
Out[11]: True
In [12]: re.search("^0[xX][0-9A-Fa-f]", "0xG") != None
Out[12]: False
pattern的意義是0開頭,接著是X或x,再來就要0-9或是A-F或是a-f表示.
可列印的ASCII Code範圍是32-126,相當於16進位的20-7E.
在RE中可以用 \x 逸出序列的方式開頭代表.
In [13]: re.search("[\x20-\x7e]", "x") != None
Out[13]: True
注意到是可列印的,而不是全部的.